package at.spengergasse.web.servlet.rechnung;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import at.spengergasse.dao.KundenDao;
import at.spengergasse.dao.RechnungDao;
import at.spengergasse.dao.derby.KundenDaoDerbyImpl;
import at.spengergasse.dao.derby.RechnungDaoDerbyImpl;
import at.spengergasse.model.Kunden;
import at.spengergasse.web.EntryPointURLEnum;
//import at.spengergasse.web.servlet.AbstractServlet;
import at.spengergasse.web.servlet.LoginServlet;

@SuppressWarnings("serial")
public abstract class AbstractRechnungServlet extends LoginServlet {

  protected static RechnungDao rechnungDAO = new RechnungDaoDerbyImpl();
  protected static KundenDao kundenDAO = new KundenDaoDerbyImpl();
  
  protected Map<Long, String> mapKunden = new TreeMap<Long, String>();

  public AbstractRechnungServlet() throws Exception {
  }
  
	protected void loadMapKunden()	{
		log.debug("Starting: Laden der MapKunden");

		List<Kunden> listKunden = new ArrayList<Kunden>();
		listKunden = kundenDAO.findAll(connection);

		Iterator<Kunden> it = listKunden.iterator();

		while (it.hasNext())		{
			Kunden kunde = it.next();
			try{	
				mapKunden.put(kunde.getId(), kunde.getNAME());
			}
			catch (Exception e){
				throw new IllegalArgumentException(
						" Fehler beim Laden der mapKunden " + e.getMessage());
			}
		}
	}

  protected Long checkRechnungIdParam(HttpServletRequest req,
      HttpServletResponse resp) throws ServletException, IOException {
    Long rechnungId = null;
    try {
      rechnungId = Long.valueOf(req.getParameter(RechnungFieldNames.ID));
    }
    catch (Exception e) {
      log.warn("problems with given rechnungId!", e);
    }

    if (rechnungId == null) {
      redirectToRechnungList(req, resp, "wrong rechnungId");
      return null;
    }
    return rechnungId;
  }

  protected void redirectToRechnungList(HttpServletRequest req,
      HttpServletResponse resp) throws ServletException, IOException {
    redirectToRechnungList(req, resp, null);
  }

  protected void redirectToRechnungList(HttpServletRequest req,
      HttpServletResponse resp, String errorMessage) throws ServletException,
      IOException {
    if (errorMessage != null) {
      req.getSession(true).setAttribute("errorMessage", errorMessage);
    }
    resp.sendRedirect(EntryPointURLEnum.RECHNUNG_LIST_ALL.getUrl());
  }
  
}
